import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.Serializable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Set;

import javax.swing.SwingConstants;
import javax.swing.JTextArea;
import javax.swing.JScrollBar;
import javax.swing.JList;
/**
 * Fenêtre de consultation d'un ouvrage
 * Code du JFrame généré par Window Builder/Swing Designer.
 * @author IUT,  A.Culet  
 * @version 1.0
 */

public class VueConsultOuvrage extends Vue {

	private JPanel contentPane;
	private JTextField textFieldIsbn;
	private JTextField textFieldTitre;
	private JTextField textFieldEditeur;
	private JTextField textFieldDateEdition;
	private JTextField textFieldNbConsultables;
	private JTextField textFieldNbEmpruntables;
	
	// pour que les boutons soient des attributs, il faut faire "convert local to field"
	private JButton buttonRech;
	private JButton buttonAnnuler;
	private JButton buttonFermer;

	private JTextArea textFieldAuteur;
	private JTextArea textArea_1;

	private JLabel lblMotscls;
	private JTextField textField;
	private JList listMotscles;
	private JList listAuteurs;
	
	
	/**
	 * Create the frame.
	 */
	public VueConsultOuvrage(Controleur controleur) {
		super(controleur);
		setTitle("Informations sur un ouvrage");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
		setBounds(100, 100, 450, 640);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("ISBN");
		lblNewLabel.setBounds(38, 66, 61, 15);
		lblNewLabel.setHorizontalAlignment(SwingConstants.RIGHT);
		contentPane.add(lblNewLabel);
		
		textFieldIsbn = new JTextField();
		textFieldIsbn.setBounds(112, 64, 114, 19);
		contentPane.add(textFieldIsbn);
		textFieldIsbn.setColumns(10);
		
		JLabel lblNewLabel_1 = new JLabel("Titre");
		lblNewLabel_1.setBounds(38, 147, 61, 15);
		lblNewLabel_1.setHorizontalAlignment(SwingConstants.RIGHT);
		contentPane.add(lblNewLabel_1);
		
		textFieldTitre = new JTextField();
		textFieldTitre.setBounds(112, 145, 214, 19);
		textFieldTitre.setEditable(false);
		contentPane.add(textFieldTitre);
		textFieldTitre.setColumns(10);
		
		buttonAnnuler = new JButton("Annuler");
		buttonAnnuler.setBounds(255, 98, 107, 25);
		buttonAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueConsultOuvrage.this);}
		});
		contentPane.add(buttonAnnuler);
		
		buttonRech = new JButton("Rechercher");
		buttonRech.setBounds(255, 61, 107, 25);
		buttonRech.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().rechOuvrage(textFieldIsbn.getText());
				}
		});
		contentPane.add(buttonRech);
		
		buttonFermer = new JButton("Fermer");
		buttonFermer.setBounds(178, 563, 107, 25);
		buttonFermer.setEnabled(false);
		buttonFermer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueConsultOuvrage.this);}
		});
		contentPane.add(buttonFermer);
		
		JLabel lblAuteur = new JLabel("Auteur(s)");
		lblAuteur.setBounds(38, 180, 61, 15);
		lblAuteur.setHorizontalAlignment(SwingConstants.RIGHT);
		contentPane.add(lblAuteur);
		
		textFieldEditeur = new JTextField();
		textFieldEditeur.setBounds(112, 415, 214, 19);
		textFieldEditeur.setEditable(false);
		textFieldEditeur.setColumns(10);
		contentPane.add(textFieldEditeur);
		
		JLabel lblEditeur = new JLabel("Editeur");
		lblEditeur.setBounds(38, 386, 61, 15);
		lblEditeur.setHorizontalAlignment(SwingConstants.RIGHT);
		contentPane.add(lblEditeur);
		
		textFieldDateEdition = new JTextField();
		textFieldDateEdition.setBounds(112, 384, 114, 19);
		textFieldDateEdition.setEditable(false);
		textFieldDateEdition.setColumns(10);
		contentPane.add(textFieldDateEdition);
		
		JLabel lblDatedition = new JLabel("Date édition");
		lblDatedition.setBounds(17, 417, 82, 15);
		lblDatedition.setHorizontalAlignment(SwingConstants.RIGHT);
		contentPane.add(lblDatedition);
		
		JLabel lblNbExemplairesEn = new JLabel("Nombre d'exemplaires en consultation");
		lblNbExemplairesEn.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNbExemplairesEn.setBounds(22, 487, 254, 15);
		contentPane.add(lblNbExemplairesEn);
		
		JLabel lblNbExemplairesEmpruntables = new JLabel("Nombre d'exemplaires empruntables");
		lblNbExemplairesEmpruntables.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNbExemplairesEmpruntables.setBounds(38, 456, 238, 15);
		contentPane.add(lblNbExemplairesEmpruntables);
		
		textFieldNbConsultables = new JTextField();
		textFieldNbConsultables.setBounds(290, 456, 60, 19);
		textFieldNbConsultables.setEditable(false);
		contentPane.add(textFieldNbConsultables);
		textFieldNbConsultables.setColumns(10);
		
		textFieldNbEmpruntables = new JTextField();
		textFieldNbEmpruntables.setBounds(290, 487, 60, 19);
		textFieldNbEmpruntables.setEditable(false);
		contentPane.add(textFieldNbEmpruntables);
		textFieldNbEmpruntables.setColumns(10);
		

		textFieldAuteur = new JTextArea();
		textFieldAuteur.setBounds(112, 178, 214, 90);
		contentPane.add(textFieldAuteur);
		
		textArea_1 = new JTextArea();
		textArea_1.setBounds(112, 282, 214, 90);
		contentPane.add(textArea_1);
		

		lblMotscls = new JLabel("Mot(s)-clé(s)");
		lblMotscls.setHorizontalAlignment(SwingConstants.RIGHT);
		lblMotscls.setBounds(17, 292, 82, 15);
		contentPane.add(lblMotscls);
		
		JLabel lblNombreExemplairesIndisponibles = new JLabel("Nombre d'exemplaires indisponibles");
		lblNombreExemplairesIndisponibles.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNombreExemplairesIndisponibles.setBounds(38, 518, 238, 15);
		contentPane.add(lblNombreExemplairesIndisponibles);
		
		textField = new JTextField();
		textField.setEditable(false);
		textField.setColumns(10);
		textField.setBounds(290, 518, 60, 19);
		contentPane.add(textField);
		
		listMotscles = new JList();
		listMotscles.setEnabled(false);
		listMotscles.setBounds(112, 287, 214, 80);
		contentPane.add(listMotscles);
		
		JScrollBar scrollBar = new JScrollBar();
		scrollBar.setBounds(309, 288, 17, 80);
		contentPane.add(scrollBar);
		
		listAuteurs = new JList();
		listAuteurs.setEnabled(false);
		listAuteurs.setBounds(112, 176, 214, 80);
		contentPane.add(listAuteurs);
		}
	
	/**
	 * alimentation des composants d'affichage en consultant directement l'ouvrage
	 */
	public void alimente(Ouvrage ouv) {
			textFieldTitre.setText(ouv.getTitre());
			//textFieldAuteur.setText(ouv.getAuteur());
			textFieldEditeur.setText(ouv.getEditeur());
			textFieldDateEdition.setText (ESDate.ecrireDate (ouv.getDateEdition()));
			int nbConsult = ouv.getNbExemplairesEnConsultation();
			int nbEmpr = ouv.getNbExemplairesEmpruntable();
			textFieldNbConsultables.setText (String.valueOf(nbConsult));
			textFieldNbEmpruntables.setText (String.valueOf(nbEmpr));
			this.repaint();
			if ((nbConsult+ nbEmpr)== 0 ){
				Message dialog = new Message("Aucun exemplaire n'est encore disponible");
				dialog.setVisible(true);
			}
			//alimenteListeAuteurs(listAuteurs
	}
	
	public void alimenteListeAuteurs(LinkedHashMap<String, Auteur> auteur) {
		Set<String> cles = auteur.keySet();
		Iterator it = cles.iterator();
		while (it.hasNext()){
			   String cle = (String) it.next(); // tu peux typer plus finement ici
			   Auteur valeur = auteur.get(cle); // tu peux typer plus finement ici
			   String auteurs = valeur.getAuteur();
			   System.out.println(valeur.getAuteur());
//			   listAuteurs.add(auteurs);
		}
	}
	
	
	
	
	
	
	/**
	 * définition des états de la fenêtre, cad des régions actives selon l'état
	 */
	public void setEtat (int etat){
		switch (etat) {
		case initiale: {
			buttonRech.setEnabled(true);
			buttonAnnuler.setEnabled(true);
			buttonFermer.setEnabled(false);
			break;
			}
		case finale: {
			buttonRech.setEnabled(false);
			buttonAnnuler.setEnabled(false);
			buttonFermer.setEnabled(true);
			break;
			}
		}
	}	
}
